<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
		    /*
			  创建对象方式:
			  1.{}
			  2.构造函数
			
			  面向对象
			  1.构造函数描述事务
			    属性
				行为
			  2.new 构造函数()
			*/
		
			//构造函数
			function Person(name, age) {
				this.name = name;
				this.age = age;
				this.eat = function() {
					console.log(this.name + "吃饭...");
				}
			}

			var p1 = new Person("zhangsan", 20);

			var p2 = new Person("lisi", 30);

			// p1.eat();
			// p2.eat();

			/*
			  1.原型是什么
			  就是一个对象，通过prototype属性访问,每一个构造函数都有一个prototype属性
			  2.可以把公共的属性和行为放到原型对象上，让所有对象共享，节省内存空间
			  3.每一个对象都有一个__proto__指向构造函数的prototype原型对象
			  
			  成员(属性和行为)查找机制:
			  1.首先在对象自身查找有没有
			  2.如果没有，到原型对象上查找(__proto__)
			*/
			console.log(p1);
			console.dir(p2);
			//对象的__proto__和Person.prototype指向的是同一个原型对象
			console.log(p1.__proto__ === Person.prototype); //true

			Person.prototype.say = function() {
				console.log("说话...");
			}

			// p1.say();
			console.log(p1.eat === p2.eat); //false
			console.log(p1.say === p2.say); //true

			// console.log(new Array());

			// var arr1 = new Array();
			// var arr2 = new Array();
			// arr1.forEach()
		</script>
	</body>
</html>
